home *** CD-ROM | disk | FTP | other *** search
- procedure main()
- local letters, line, wordlist, word, words, maxword, lineno, i
- local j, lines, numbers
- letters := &lcase ++ &ucase ++ '\''
- words := table("")
- maxword := lineno := 0
- while line := read() do {
- lineno +:= 1
- write(right(lineno,6)," ",line)
- line := map(line) # fold to lowercase
- i := 1
- while j := upto(letters,line,i) do {
- i := many(letters,line,j)
- word := line[j:i]
- if *word < 3 then next # skip short words
- maxword <:= *word # keep track of longest word
- # if it's a new word, start set
- if *words[word] = 0 then words[word] := set([lineno])
- else insert(words[word],lineno) # else add the line number
- }
- }
- write()
- wordlist := sort(words) # sort by words
- i := 0
- while word := wordlist[i +:= 1][1] do {
- lines := "" # build up line numbers
- numbers := sort(wordlist[i][2])
- while lines ||:= get(numbers) || ", "
- write(left(word,maxword + 2),": ",lines[1:-2])
- }
- end
-